Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

хранение спецсимволов в mySQL (CompAS)
Author Message
CompAS
Заглянувший



Joined: 04 Jul 2004
Posts: 9
Карма: 0
   поощрить/наказать


PostPosted: Thu Jan 26, 2006 10:26 pm (написано за 2 минуты 38 секунд)
   Post subject: хранение спецсимволов в mySQL
Reply with quote

В тексте статьи нужно сохранить какой-нибудь неординарный символ, например ½ (это 1/2 в красивом виде). Система ввода данных использует TEXTAREA. Пишем код символа, сохраняем. Затем загружаем этот текст для редактирования, TEXTAREA показывает именно символ, а не код. При повторном сохранении вместо спецсимвола в БД записывается знак '?'. Что нужно делать, чтобы предотвратить это?
Back to top
View user's profile Send private message
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9986
   поощрить/наказать


PostPosted: Thu Jan 26, 2006 11:46 pm (спустя 1 час 20 минут; написано за 2 минуты 29 секунд)
   Post subject:
Reply with quote

CompAS wrote:
Система ввода данных использует TEXTAREA.
Ну, я, например, не знаю, что у Вас за «система ввода» — через htmlspecialchars() введённое прогонять не пробовали?..
Back to top
View user's profile Send private message
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Fri Jan 27, 2006 4:53 pm (спустя 17 часов 6 минут; написано за 1 минуту 27 секунд)
   Post subject:
Reply with quote

bæv wrote:
htmlspecialchars()
При выборке из БД, а не вставке в неё
Back to top
View user's profile Send private message
CompAS
Заглянувший



Joined: 04 Jul 2004
Posts: 9
Карма: 0
   поощрить/наказать


PostPosted: Fri Jan 27, 2006 5:23 pm (спустя 29 минут; написано за 1 минуту 49 секунд)
   Post subject:
Reply with quote

Обратимся к документации PHP:

string htmlspecialchars ( string string [, int quote_style [, string charset]])
{...}
The translations performed are:
    '&' (ampersand) becomes '&'
    '"' (double quote) becomes '"' when ENT_NOQUOTES is not set.
    ''' (single quote) becomes ''' only when ENT_QUOTES is set.
    '<' (less than) becomes '&lt;'
    '>' (greater than) becomes '&gt;'
Как видно, очень многие символы не кодируются этой функцией. Хотя можно написать свою. Но всё-таки, может быть проблему можно решить именно в mySQL?
Back to top
View user's profile Send private message
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9986
   поощрить/наказать


PostPosted: Fri Jan 27, 2006 7:42 pm (спустя 2 часа 18 минут; написано за 3 минуты 19 секунд)
   Post subject:
Reply with quote

CompAS wrote:
Как видно, очень многие символы не кодируются этой функцией.
Обратимся к документации PHP:
php.rinet.ru/manual/ru/function.htmlspecialchars.php wrote:
string htmlspecialchars ( string string [, int quote_style [, string charset]] )

В HTML некоторые символы имеют специальное значение и для сохранения своего значения должны быть преобразованы в HTML сущности. Эта функция возвращает строку, над которой проведены некоторые из таких преобразований. Этих преобразований достаточно для большинства задач веб-программирования. Если вам нужно преобразовать все возможные сущности, используйте htmlentities().
Вам последнее предложение каким цветом выделить?


CompAS wrote:
может быть проблему можно решить именно в mySQL?
В MySQL есть, конечно, функции обработки строк. Если сильно захотеть, наверно можно и составить запрос с REPLACE().
Только нужно ли?

Лично мне — нет.
Back to top
View user's profile Send private message
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Fri Jan 27, 2006 8:18 pm (спустя 36 минут; написано за 24 секунды)
   Post subject:
Reply with quote

CompAS wrote:
The translations performed are:

      '&' (ampersand) becomes '&amp;'
Помедитируйте над этим (-;
Back to top
View user's profile Send private message
CompAS
Заглянувший



Joined: 04 Jul 2004
Posts: 9
Карма: 0
   поощрить/наказать


PostPosted: Sat Jan 28, 2006 9:40 pm (спустя 1 день 1 час 21 минуту; написано за 1 минуту 58 секунд)
   Post subject:
Reply with quote

Хочу извиниться, что неясно сформулировал задачу. TEXTAREA для удобства редактора должен отображать спецсимволы именно как спецсимволы, а вот в БД они должны записываться как коды. htmlentities() кодирует ВСЕ символы, что плохо с точки зрения объёма информации.
Я решил всё-таки не пользоваться функциями обработки строк mySQL, а написать функцию Javascript:
Code (JavaScript): скопировать код в буфер обмена
function prepareSaveText (text) {
        for (var i = 0; i < text.length; i++) {
                if (text.charAt(i).charCodeAt() > 160 && text.charAt(i).charCodeAt() < 192) {
                        text = text.substr(0,i) + "&#" + text.charAt(i).charCodeAt() + ";" + text.substr(i + 1);
                }
        }
        return text;
}
Back to top
View user's profile Send private message
Миша Спларов
Участник форума



Joined: 17 Nov 2003
Posts: 821
Карма: 65
   поощрить/наказать

Location: Россия, Москва

PostPosted: Sun Jan 29, 2006 1:22 am (спустя 3 часа 41 минуту; написано за 33 секунды)
   Post subject:
Reply with quote

CompAS, htmlentities одним из атрибутов (третьим) принимает кодировку текста.
Back to top
View user's profile Send private message
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Mon Jan 30, 2006 8:31 pm (спустя 1 день 19 часов 8 минут; написано за 59 секунд)
   Post subject:
Reply with quote

CompAS
Вы делаете htmlentities() или htmlspecialchars() до добавления в базу, что ли?
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML